//
//  UITextView+Enxtensiion.swift
//  WeiBoItem
//
//  Created by jss on 16/5/2.
//  Copyright © 2016年 jss. All rights reserved.
//

import UIKit

extension UITextView {

    //将表情图片转成字符串 然后再发送到微博
    var emoticonText: String? {
        
        var result = ""
        
        let attr = self.attributedText
        
        //print(attr)
        
        print("=======================")
        
        //遍历副文本里面的内容
        attr.enumerateAttributesInRange(NSMakeRange(0, attr.length), options: []) { (dict, range, _) -> Void in
            
            //print(dict)//字典里面打印出来有attachment
            
            if let atta = dict["NSAttachment"] as? JSSTextAttachmentModel{
                
                print(atta.emoticon?.chs)
                
                //是表情 取到表情的描述字符串
                
                result = result + (atta.emoticon?.chs ?? "")
                
            }else{
              //不是表情 是文字 所以需要截取
//                print("是文字")
//                print("attr\(attr)")
//                print("range\(range)")
                result = result + (attr.string as NSString).substringWithRange(range)
            
            }
        }
        
        return result
    }

    func insertEmotiocon(emoticon:JSSEmoticonModel){
        
        //1.将现有文字生成一个NSMutableAttributeString
        let originalAttr = NSMutableAttributedString(attributedString: self.attributedText)
        //通过表情模型生成表情图片
        let image = UIImage(named: "\(emoticon.folderName ?? "")/\(emoticon.png ?? "")", inBundle: JSSEmoticonkeyboardViewModel.EmoticonkeyboardSharedViewModel.emoticonBundle, compatibleWithTraitCollection: nil)
        //通过图片生成NSTextAttachment
       // let attachment = NSTextAttachment()
        let attachment = JSSTextAttachmentModel()
        
        attachment.emoticon = emoticon
        attachment.image = image
        
        //设置图片大小
        let attachmentHW = self.font!.lineHeight
        
        attachment.bounds = CGRect(x: 0, y: -4, width: attachmentHW, height: attachmentHW)
        
        //通过attachment生成一个NSAttributeString
        let attr = NSAttributedString(attachment: attachment)
        
        //获取光标所在的位置
        var selectedRange = self.selectedRange
        
        //插入的语法  和替代一样的
//         originalAttr.insertAttributedString(attr, atIndex: selectedRange.location)
        originalAttr.replaceCharactersInRange(selectedRange, withAttributedString: attr)
        
        //将第二步生成的NSAttributeString 添加到第一步生成的NSMutableAttributeString里
        //添加到原有的副文本里面
       // originalAttr.appendAttributedString(attr)//这个方法会把图标拼接到原来的文本的最后面 如果光标不是在最后面的话 就出现一点击出现插入两个表情
        
        
        
        
        //设置字体大小
        originalAttr.addAttribute(NSFontAttributeName, value: self.font!, range:NSMakeRange(0, originalAttr.length))
        
        
        //将第三步的执行结果赋值给 textview的attributeText
        self.attributedText = originalAttr
        
        //设置光标的位置
        selectedRange.location += 1
        selectedRange.length = 0
        self.selectedRange = selectedRange
        
        //发送文字改变的通知(控制器里面有接收通知 和 包括方法的实现(和前面写文字的逻辑 一样))
        NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: nil)
        
        //让navigation右边的发送按钮 根据textView有文字而变化 (在控制器里面有代理方法  这里只需要调一下就好了)
        delegate?.textViewDidChange?(self)
        
    }




}
